package opf5.entities.inscripciones;

import opf5.entities.condicionesInscripcion.CondicionNula;
import opf5.entities.dominio.Inscripcion;
import opf5.entities.dominio.Jugador;
import opf5.entities.dominio.Partido;
import opf5.entities.excepciones.OperacionNoPermitidaException;
import opf5.entities.repositorios.OPF5Factory;

public class InscripcionCondicional extends InscripcionConcreta {
	private CondicionDeInscripcion condicion;

	public InscripcionCondicional(Jugador jugador) {
		super(jugador);
		condicion = new CondicionNula();
	}

	public InscripcionCondicional(Jugador jugador, CondicionDeInscripcion condicion) {
		super(jugador);
		this.condicion = condicion;
	}

	@Override
	public boolean tieneMasPrioridadQue(Inscripcion otraModalidad) {
		return false;
	}
	
	@Override
	public void confirmarVacante(Partido partido) {
		confirmarSatisfaceCondiciones(partido);
		super.confirmarVacante(partido);
	}

	private void confirmarSatisfaceCondiciones(Partido partido) {
		if (!condicion.verificaCondicion(partido))
			throw (new OperacionNoPermitidaException("El partido no satisface "
					+ "las condiciones. La inscripcion fue rechazada."));
	}

	public void setCondicion(CondicionDeInscripcion condicion) {
		this.condicion = condicion;
	}
	
	@Override
	public Inscripcion copiar(Jugador otroJugador) {
		Inscripcion nuevaInscripcion = OPF5Factory.getInstance().makeInscripcionCondicional(otroJugador);
		return nuevaInscripcion;		
	}
	
	@Override
	public String toString() {
		return "Condicional";
	}
}
